#增加程序提示，增强用户可读性
import os.path
import time

def calculate_bmr(gender, weight, height, age):
    """
    计算基础代谢率（BMR）。

    参数：
    gender -- 性别，取值为 "男" 或 "女"。
    weight -- 体重，单位为公斤。
    height -- 身高，单位为厘米。
    age -- 年龄，单位为岁。

    返回值：
    BMR 的数值，单位为千卡/天。
    """
    if gender == "男":
        bmr = 13.7 * weight + 5.0 * height - 6.8 * age + 66
    elif gender == "女":
        bmr = 9.6 * weight + 1.8 * height - 4.7 * age + 655
    else:
        raise ValueError("性别输入错误，请重新输入！")

    if bmr <= 0:
        raise ValueError("计算错误，请检查输入数据是否正确！")
    else:
        print("您的 BMR 值是 {:.2f} 千卡/天。".format(bmr))
        print("BMR 的含义是：在静止、空腹、无任何刺激和压力的情况下，人体维持正常生命活动所需要的最低热能。")
        return bmr


def save_bmr_data(data_file, data):
    with open(data_file, 'a') as f:
        f.write(','.join(str(x) for x in data) + '\n')


def main():
    data_file = "bmr_data.txt"
    if not os.path.exists(data_file):
        with open(data_file, 'w') as f:
            f.write("时间,性别,体重(kg),身高(cm),年龄,BMR\n")

    print("欢迎使用 BMR 计算程序！")
    print("本程序可以根据您的性别、体重、身高和年龄，快速计算出您的基础代谢率（BMR）值。")
    print("请按照以下格式输入数据：女 48 165 20")

    while True:
        try:
            gender, weight_str, height_str, age_str = input("请输入性别（男/女）、体重（公斤）、身高（厘米）和年龄[空格隔开]: ").split()
            weight = float(weight_str)
            height = float(height_str)
            age = int(age_str)

            if not (30 <= weight <= 300) or not (100 <= height <= 250) or not (10 <= age <= 150):
                raise ValueError("输入有误，请重新输入正确的数据！体重范围为 30kg - 300kg，身高范围为 100cm - 250cm，年龄范围为 10岁 - 150岁。")

            bmr = calculate_bmr(gender, weight, height, age)

            now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
            data = [now, gender, weight, height, age, bmr]
            save_bmr_data(data_file, data)

        except ValueError as e:
            print(str(e))
            continue

        y_or_n = input('是否退出程序(y/n)？')

        while y_or_n not in ['y', 'n']:
            print("输入有误，请重新输入！")
            y_or_n = input('是否退出程序(y/n)？')

        if y_or_n == 'y':
            save_data = input("是否需要保存历史记录 (y/n)？ ")
            while save_data not in ['y', 'n']:
                print("输入有误，请重新输入！")
                save_data = input("是否需要保存历史记录 (y/n)？ ")

            if save_data == "y":
                print("历史记录已保存到文件 {} 中。".format(data_file))
            else:
                print("历史记录未保存。")

            break


if __name__ == '__main__':
    main()